package q179_largestNumber;

import java.util.Arrays;

public class Solution_2 {
    /*
    相较于solution1 该解法方式相对更加清晰
     */
    public String largestNumber(int[] nums) {
        Integer[] numsIntegers = new Integer[nums.length];
        for (int i = 0; i < nums.length; i++) {
            numsIntegers[i] = nums[i];
        }
        // 因为使用Arrays中内置接口重写来排序 需要使用包装类
        // 所以必须先将nums转换为Integer类型传入
        // 排序的思路是：首先将x和y转换成对应的String 例如 4 45 转换成 "4" "45"
        // 而字符串是可以采用拼接的 于是通过相加可以得到  "445" "454"
        // 通过compareTo即可比对两个字符串的大小
        Arrays.sort(numsIntegers, (x, y) -> {
            String a = String.valueOf(x);
            String b = String.valueOf(y);
            // 此处按照字典序进行比较
            return (b + a).compareTo(a + b);
        });

        if (numsIntegers[0] == 0) {
            return "0";
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < numsIntegers.length; i++) {
            sb.append(numsIntegers[i]);
        }

        return sb.toString();
    }
}
